package com.wxxymaker.service;

import com.wxxymaker.model.entity.Shop;
import com.wxxymaker.model.entity.Stage;
import com.wxxymaker.model.entity.StageCount;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;

import java.util.List;
import java.util.Map;

public interface StageCountService {
    /**
     * 添加，添加时增加统计时间
     */
    StageCount add(StageCount stageCount);

    /**
     * 根据id删除
     * @param id 要被删除的id
     */
    StageCount delete(Integer id);

    /**
     * 根据阶段删除统计记录
     * @param stage 阶段 必须包涵id
     * @return 删除条数
     */
    int deleteByStage(Stage stage);

    // 和下面不同之处只是可以进行自定义排序方式
    Page<StageCount> page(Integer pageNo, Integer size, Map<String, Object> map, Sort sort);
    /**
     * 分页查询，查询条件主要为公司和阶段，也可以是其他字段
     * 无添加时查询所有
     * 按照统计时间进行倒序排序
     * @param pageNo 页码
     * @param size   尺寸
     * @param map    查询条件 shop_id、stage_id、StageCount的其他属性
     */
    Page<StageCount> page(Integer pageNo, Integer size, Map<String, Object> map);

    Page<StageCount> page(Integer pageNo, Integer size);

    List<StageCount> findAllByShop(Shop shop);

    /**
     * 判断该阶段该公司的记录是否已经存在
     * 用来在保存时判断是更新还是添加
     * @param stage 阶段 必须id
     * @param shop  公司 必须id
     * @return true存在 反之
     */
    StageCount isExist(Stage stage, Shop shop);

    /**
     * 为某个公司统计总评
     * @param shop 公司 必须包涵id
     * @return 总评分
     */
    double countTotalForShop(Shop shop);

    /**
     * 阶段记录统计
     * 为该阶段下的所有公司进行打分统计，最后合成一条统计数据保存
     * @param stage 阶段(必须包涵 id，type，name)
     */
    void countScoreAndSave(Stage stage);
}
